チャリティーカンファレンス沖縄2020 vol.1 フロントエンド編
https://gyazo.com/e01285fe91bd47627dc0af8532baee5e
https://charity-conf.okinawa.jp/
フロンエンド開発における課題を問い直す
https://speakerdeck.com/ug/issues-about-frontend-development
あらかきゆうじ
株式会社Payke
なぜ問い直すのか
技術というのは問題解決のソリューション
課題からソリューションを知ることで今自分はなにを学ぶべきかが見える
課題
与える、与えられる題目
解決しなければならない問題
なぜ解決しないとなのか
進みたい方向がある
進みたい速度がある
その障害が課題
フロントエンドの課題
良いUXを届ける
UI=ユーザーとの接点
体験を良くしていきたい
問題解決しても悪い体験になってはいけない
使いづらい
バグる
どう使うかわからない
使えるけど、気分が良くない
UXハニカム
UXの評価軸
Useful
Desirable
Accessible
Credible
Findable
Usable
UXを高めるために発生する課題
正解がわからない
共通解はない
ユーザー層や市場で変わってくる
マルチデバイス対応
昔はPCでの利用だけの考慮だった
各デバイス、各OSへの対応
ユーザーの期待値への増加
スマホの普及でソフトウェアが身近になってきた
一般的に利用されるもの
Instagram
Tiktok
Netfilx
これらがアプリのUXに対する期待値を増加させた
正解がわからないものにどう立ち向かうか
小さく作ってリリースしてフィードバックをもとに改善
アジャイル
MVP
試行回数と精度
課題
試行回数はいかに増えるか
限られた人数で開発効率上げる
コード量が増えても効率を落とさないようにできるか
データドリブンな意思決定をうまくできるか
データ収集
データの可視化
Firebaseの必須項目になりうる
上記課題を解決しうる道具になる
試行回数を回すツール
Firebase Authentication
トレードオフを考えておく
Cloud Firestore
GCPにホストされたNoSQLデータベース
メンタルモデルが違うのでリスクの事前調査が必要
意思決定のためのツール
Google Analytics
マルチデバイス対応の課題
以下対象
Android
iOS
Web
すべてのアプリ用に書くとリソースが増える
共通化もまた調整がむずかしい
Flutterがひとつの課題解決
UIとビジネスロジックの共通化
ネイティブ機能はプラグイン
直接書く必要があったりする
ユーザー期待値増加に立ち向かう手段としてのSPA
スマホアプリ普及によってそれに相当するUX提供
以下問題も発生
JS担当範囲増加
プロダクトの複雑性増加
React.js
Vue.js
Angular
不具合発生をへらす
TypeScript
初回表示のパフォーマンス悪化
SSR
SSR/CSR/SSGの動向2020
柴田 和祈
ウォンタ株式会社
microCMS
CSR
SPAのこと
サーバーレスSPA
expressを利用しない
Cloud Functions
https://gyazo.com/ade95487d674271ca1482bfd2e6f8544
メリット
JSONのみでやりとりできる
サーバー管理も不要
大量アクセスもオートスケールしてくれる
デメリット
メディア媒体には不向き
indexされない
SSR(+CSR)
初期ロード時にサーバサイドでHTMLを生成
SPAでの欠点を補う
Next.jsやNuxt.jsで容易にできるように
デメリット
Webサーバーが必要
ホスティングだけではできない
SSG
静的ページの生成
高速、セキュア
Jamstack
SSG+CSR のような構成
事前ビルドした静的ファイルを生成
必要なものはAPI経由でやる
サーバーを出来る限りもたずにやる
メディアなど静的コンテンツが多いサイトに向いている
https://gyazo.com/f8541d07ce2e099b79be966e3025d727
メリット
静的ファイルのホスティングのみ
個人利用レベルは無料
APIコールはビルドのみ
セキュアでハイパフォーマンス
デメリット
ページ数が多いと時間がかかる
プレビュー部分の実装が必要
ヘッドレスなので
新しい技術なので知見が足りない、ハマりポイントあり
ビルドの最適化
Jamstackはビルドが9割
ページ生成の時間を減らしていこう
nuxt generateの検証
nuxtの軽減対応
payloadでの高速化
各記事がわのasyncDataで受け取れる
APIリクエストを減らすことができる
Next.js
Incremental Static Regeneration
初回はSSR
それ以降はHTMLが配信
遷移時はCSR
https://static-tweet.now.sh/
Previe Mode
cookieを発行
下書きなのかを判定する
Vercel
サーバサイドも処理するホスティングサービス
NetlifyやS3ではできないもの
GatsbyJS
Gatsby Cloud
Conditional Page Builds
Next.js Storybook Driven Development
https://www.slideshare.net/takuyatejima1/nextjs-storybook-driven-development
手島 拓也
GAOGAO Pte. Ltd.
Storybook
コンポーネント・UIカタログ集
Storybook開発駆動
UIコンポーネントTDD
疎結合の意識ができる
再利用性が高い
導入したプロジェクト
React.js 16.3.1
TypeScript
Atomic Design
Next.jsベース
styled-components
グローバルなチーム。コミュニケーションは英語
React hooks
コンポーネント.stories.tsと対でつくる
props(インターフェイス)の設計をする
react-hooks-form
データの受け渡しはuseContextに統一
useReducerは使用しない
storyshots-puppeteer
画像依存の場合は遅延で動作させる
500msくらい
アニメーションは妥協する
差分画像も指摘してくれる
どんな人におすすめか
コンポーネントをみれば分かるコミュニケーション
複数人開発時
独立性・再利用性を意識できる
DXたかいのでおすすめ
フロントエンドのエコシステム
https://speakerdeck.com/10shi10ma/frontend-ecosystem?slide=7
外松 俊尚
サイボウズ株式会社
エコシステム
基盤がないとどうなるか
1. プロダクトの例
kintone
JSでカスタマイズが可能
様々な連携、プラグインが販売したり開発されてエコシステムが広がっている
ベースになるAPIがない場合
すべてプロダクト側で開発する
ユースケースを満たすけどロードマップと違うと開発されない
2. コードの場合
lintをチェックしたい
新しい場合、PRを投げるしかないか
自分たちでルールを自作できるので簡単
フロントエンドのエコシステムとは?
Webアプリ
npm
ライブラリ
有志の開発者が開発して共有・利用
ベースになるもの
OSS
誰でも開発できる基盤
npm
開発コミュニティ
4つのエコシステム
npm
Node.jsのパッケージを管理
レジストリ
https://www.npmjs.com
npm install
小さなライブラリを組み合わせて開発
npmというエコシステムに乗る
フロントエンドの変化について
早いと思われてる
エコシステムの成熟している
特定のものの変更はある
なので移行しやすいように工夫する
Plugin
eslint, babel, webpackはプラグインベース
様々なユースケース
変更後のASTに差し込めるもの
Traverse(Transform)
Config
フロントエンドの環境構築の多さ
Shareable Config
設定の共有
presets
簡単に設定できる
Create New Project / Automatic setup
create-react-app
npx -p @storybook/cli sb init
npm initについて
イニシャライザー
Type
TypeScript
型定義が必要になる
npm install -D @types/xxxxx
用意するには
本体で提供
有志で作成する
Definitely Typed
hegelというチェッカー
型定義ファイルを利用できる
ライブラリの型定義のエコシステム
あなたのWordPressサイトをJAMstackにする話
Hidetaka Okamoto
株式会社デジタルキューブ
Conclusion
WordPressをJamstackのAPIとしてつかう
既存の資産と集合知を活かす
CMSをas a Service なAPIで運用できるか
なぜWordPressか?
Jamstackの対極?
WordPress
サーバーサイドCMS
モノリシックなサーバーで動くウェブアプリ
SPAではない
WP Rest APIが使える
WP API
v4.7からの機能
REST API
ユーザは使い慣れたコンテンツ管理のまま
開発者はJamstackで開発できる
メリット
WordPressの運用実績・経験がある
フロント開発だけ刷新したい
WP自体やミドルウェアの保守更新が多い場合
CMSごと変えるのもアリ
Movable Typeのように静的出力する
最短時間での立ち上げは向かない
GatsbyJS
WP APIをデータソースにするプラグインがある
gastby-soruce-wordpress
gatsby-config.jsで設定する
GraphQLからすべてのデータを取得
ページのURLをどんどん生成できる
ビルド時にbulk getしてはめ込むスタイル
他のdata sourceとあまり変わらない
sourceプラグイン設定とGraphQLスキーマに慣れればOK
Shifter
WordPressを静的化
ハマりどころ
日本語URLはほとんどSSGが非対応
WP側で変更する
パーマリンクはデフォルトに変更する
WP REST APIが動かない
WPテーマはblank系推奨
WP上での表示は確認させない
JAMstack Deployments
WPからビルドWebhookをコールするプラグイン
管理
表示系の実装がなくなれば管理対象は減る
ミドルウェアやコアの更新は残る
フルマネージドなWordPressホスティング利用
非公開記事のプレビュー
gatsby developでローカル起動、もしくはサーバーで起動
Node.jsサーバーにプレビューサイトをデプロイ
プレビューのみはBASIC Authのリクエストを投げる
Jamstack
得意なことは得意なサービスにまかせる
データソースを複数扱うメリットを最大化に
Tailwind CSS-ユーティリティファーストのCSSフレームワークとは
Chris Wu
OIST / 沖縄科学技術大学院大学
Functional & UtilityベースのCSS フレームワーク
CSSフレームワーク・コンポーネント集
Tachyons
Basscss
Bootstrap
mx, pt, col, d-flex ...
Adam Wathan
Tailwind 作者
とても使いやすくフレンドリーなフレームワーク
TailwindとBootstrapとの比較
ユーティリティファーストである
UIコンポーネント+ユーティリティ
とてもカスタマイズしやすい
むずかしい
使用難易度は高い
簡単に使えたり、高度な使い方はできる
ウェブサイトや
ファイルサイズは思い
軽い
フロントエンドより
バックエンド、ジュニアフロントエンジニア向け
ユースケース
firefox send
なぜTailwind CSSを使うのか
BEM
Boostarpのユーティリティと合わせる
OISTのコロナリサーチコミュニティプロジェクトはそれを採用している
https://www.oist.jp/ja/covid-19/community-projects
解決してくれるもの
リファクタリングしやすい
HTMLとCSSが疎結合なので
ネイティブコンポーネントを使用しない
エンドユーザーのために使いやすい
リソース
公式ドキュメント
https://www.youtube.com/playlist?list=PL7CcGwsqRpSM3w9BT_21tUU8JN2SnyckR
https://github.com/aniftyco/awesome-tailwindcss
考慮すること
ファイルサイズ
開発ビルドは大きくなっている
gzipして7kb
1639
PostCSS
PurgeCSS
norimalize.css
カスタマイズ性
bootstrapは_variablesで変更できる
tailwind.config.jsで設定できる